package src.model.gameWorld.pathfinding.movement;

import src.model.gameObject.GameObject;
import src.model.gameWorld.Position;

/**
 * <b>Overview</b>
 * An implementation of Movement in a two-dimensional world.
 *
 * <b>Responsibilities</b>
 * Determine a movement cost based on a two-dimensional Direction2D of movement over a particular terrain, or whether that terrain is passable to the unit at all.
 *
 * <b>Collaborators</b>
 * None.
 *
 * <b>Implementor</b> - Bruce
 * <b>Tester</b> - Tim
 *
 * @author Bruce
 */
public interface Movement2D extends Movement
{
	/**
	 * @param direction the Direction2D to move in.
	 * @param pathfindingTerrain the PathfindingTerrain to move over.
	 * @return the MovementCost associated with moving over the specified vector and over the specified PathfindingTerrain.
	 * @throws IllegalTerrainException if the specified PathfindingTerrain cannot be traversed by this Movement.
	 */
	public MovementCost getMovementCost(GameObject mover, Direction2D direction, Position pathfindingTerrain) throws IllegalTerrainException;
}
